// package语句：声明当前类所在的包
// com.itheima.demo表示这是在示例相关的包中
package com.itheima.demo;

// public是访问修饰符，表示这个类可以被任何地方访问
// class关键字用于定义一个类
// Test是类名，表示这是一个测试类，用于测试Movie和MovieOperator类的功能
public class Test {
    // main方法：Java程序的入口点
    // public static void是固定格式
    // String[] args是命令行参数数组
    public static void main(String[] args) {
        // 注释：说明这个程序的目标是完成面向对象的综合小案例
        // 面向对象编程的核心思想是将数据和操作数据的方法封装在对象中
        
        // 创建一个电影数组，用于存储多个电影对象
        // Movie[]表示这是一个Movie类型的数组
        // movies是数组变量名
        // new Movie[6]创建一个长度为6的数组，初始值都是null
        Movie[] movies = new Movie[6];
        
        // 为数组的每个位置赋值，创建具体的电影对象
        // movies[0]表示数组的第一个元素（索引从0开始）
        // new Movie(...)调用Movie类的有参数构造方法创建电影对象
        // 参数依次是：电影id、电影名称、电影价格、电影演员
        movies[0] = new Movie(1, "星际穿越", 9.6, "安妮海瑟薇");
        
        // 为数组的第二个位置创建第二个电影对象
        movies[1] = new Movie(2, "速度与激情8", 9.2, "瑞秋·费尔南多");
        
        // 为数组的第三个位置创建第三个电影对象
        movies[2] = new Movie(3, "夏洛特烦恼", 9.2, "沈腾");
        
        // 为数组的第四个位置创建第四个电影对象
        movies[3] = new Movie(4, "战狼2", 9.2, "吴京");
        
        // 为数组的第五个位置创建第五个电影对象
        movies[4] = new Movie(5, "让子弹飞", 9.2, "姜文");
        
        // 为数组的第六个位置创建第六个电影对象
        movies[5] = new Movie(6, "暗战", 9.2, "王大陆、渣渣辉");

        // 创建电影操作对象
        // MovieOperator是类名
        // mo是对象变量名
        // new MovieOperator(movies)调用构造方法创建对象，并传入电影数组
        // 这样MovieOperator对象就可以操作这个电影数组了
        MovieOperator mo = new MovieOperator(movies);
        
        // 调用MovieOperator对象的printAllMovies方法
        // 这个方法会打印数组中所有电影的信息
        mo.printAllMovies();
        
        // 调用MovieOperator对象的searchMovieById方法
        // 这个方法会让用户输入电影id，然后查找并显示对应的电影信息
        mo.searchMovieById();
    }
}
